package com.wzdigit.wms.raw.mapper.gdn;

import com.wzdigit.framework.orm.mybatis.MyBatisRepository;
import com.wzdigit.wms.raw.client.response.gdn.delivery.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;


/**
 * 交接确认Mapper
 * Created by zyf on 2021/7/7 17:35
 */
@MyBatisRepository
public interface DeliveryNewMapper {
    //查询交接确认主档
    List<DeliveryHeaderResponse> selectDeliveryHeader(@Param("gdnNo") String gdnNo);

    //查询交接确认明细
    List<DeliveryDtlResponse> selectDeliveryDtl(@Param("gdnHeaderId") BigDecimal gdnHeaderId);

    //查询已经交接的条码数量
    List<DeliveryScanQty> selectConfirmQty(@Param("gdnHeaderId") BigDecimal gdnHeaderId);

    //查询缓存的SN数量【未交接】
    List<DeliveryScanQty> selectScanQty(@Param("goodsSnList") List<String> goodsSnList);

    //扫描SN后返回对应货品信息
    List<DeliveryGoodsResponse> selectOneDeliveryGoods(@Param("gdnHeaderId") BigDecimal gdnHeaderId,
                                                       @Param("goodsSn") String goodsSn);

    List<DeliveryGoodsResponse> selectDeliveryGoodsNew(@Param("gdnHeaderId") BigDecimal gdnHeaderId,
                                                       @Param("goodsSn") String goodsSn);

    List<DeliveryGoodsResponse> selectDeliveryGoodsList(@Param("gdnHeaderId") BigDecimal gdnHeaderId,
                                                       @Param("goodsSnList") List<String> goodsSnList);

    //根据发货主档ID+发货明细skuId查询货品信息【过滤掉不在拣货任务明细中的SN】
    List<DeliveryGoodsResponse> selectDeliveryGoods(@Param("gdnHeaderId") BigDecimal gdnHeaderId,
                                                    @Param("skuId") BigDecimal skuId);

    //更新出库单SN交接状态
    void updateDeliveryFlag(@Param("gdnHeaderId") BigDecimal gdnHeaderId,
                            @Param("goodsSnList") List<String> goodsSnList,
                            @Param("deliveryFlag") Integer deliveryFlag);

    //查询出库单头，简洁版，防止溢出
    SimpleGdnHeader searchGdnHeader(@Param("gdnNo") String gdnNo);

    //查询出库明细信息
    List<SimpleGdnDtl> selectGdnDtlList(@Param("gdnHeaderId") BigDecimal gdnHeaderId,
                                        @Param("dtlIdList") List<BigDecimal> dtlIdList);

    //更新出库货品
    int updateGdnGoods(@Param("gdnDtlId") BigDecimal gdnDtlId,
                       @Param("goodsStatus") Integer goodsStatus,
                       @Param("goodsSnList") List<String> goodsSnList,
                       @Param("loginName") String loginName,
                       @Param("modifyDate") Date modifyDate);

    //更新出库明细
    int updateGdnDtl(@Param("gdnDtlId") BigDecimal gdnDtlId,
                     @Param("dtlStatus") Integer dtlStatus,
                     @Param("loginName") String loginName,
                     @Param("modifyDate") Date modifyDate,
                     @Param("addQty") BigDecimal addQty,
                     @Param("closeDate") Date closeDate);

    //更新出库主档
    int updateGdnHeader(@Param("gdnNo") String gdnNo, @Param("headerStatus") Integer headerStatus,
                        @Param("loginName") String loginName,
                        @Param("modifyDate") Date modifyDate,
                        @Param("closeDate") Date closeDate);

    //查询GDN主档对应明细的条数
    Integer selectCountDtl(@Param("gdnHeaderId") BigDecimal gdnHeaderId,
                           @Param("dtlStatusList") List<Integer> dtlStatusList);

    //查询已经交接的数量
    BigDecimal selectDeliveryCount(@Param("gdnHeaderId") BigDecimal gdnHeaderId);

    //查询需求数
    BigDecimal selectOrderyCount(@Param("gdnHeaderId") BigDecimal gdnHeaderId);

    //更新出库明细
    int updateAllGdnDtl(@Param("headerId") BigDecimal headerId, @Param("dtlStatus") Integer dtlStatus,
                        @Param("loginName") String loginName,
                        @Param("modifyDate") Date modifyDate,
                        @Param("closeDate") Date closeDate);

    //查询一次过账回传失败的条数
    Integer selectFailGdn(@Param("gdnNo") String gdnNo);






















    //根据出库主档ID查明细ID集合
    List<BigDecimal> selectgdnDtlList(@Param("gdnHeaderId") BigDecimal gdnHeaderId);
    //根据入库明细ID+条码查询是否存在拣货任务当中
    String selectPicktaskSn(@Param("gdnDtlId") BigDecimal gdnDtlId, @Param("goodsSn") String goodsSn);
    //根据入库明细ID查询对应拣货任务下的条码
    List<String> selectPicktaskSnList(@Param("gdnDtlList") List<BigDecimal> gdnDtlList);





}
